﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Estrutura;
using Banco;
using Negocio;
using Frame;

public partial class Matriculas_Aluno_pagamento : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (!string.IsNullOrEmpty(Request.QueryString["OPERACAO"]))
                hid_operacao.Value = Request.QueryString["OPERACAO"];

            //Quando carrengar a interface a partir dos pagamentos do Aluno(a)
            if (!string.IsNullOrEmpty(Request.QueryString["PAGAMENTO_ID"]))
            {
                ES_Pagamento pagto = new BD_Pagamento()._obter_Pagamento_by_id(Request.QueryString["PAGAMENTO_ID"]);
                aluno_id.Text = new BD_Matricula()._obter_Matricula_by_id(pagto.MATRICULA_ID).ALUNO_ID;
                imgbConfirmarDadosCad.Visible = false;
            }
            if (!string.IsNullOrEmpty(Request.QueryString["ALUNO_ID"]))
            {                
                aluno_id.Text = Request.QueryString["ALUNO_ID"];
                
            }
            if (!string.IsNullOrEmpty(aluno_id.Text))
            {
                ES_Aluno aluno = new BD_Aluno()._obter_Aluno_by_id(aluno_id.Text);             
                pes_nome.Text = aluno.PES_NOME;
            }

            //preencher sugestão de mes/ano
            pag_anoreferencia_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
            pag_mesreferencia.SelectedValue = System.DateTime.Now.Month.ToString();
            pag_anoreferencia.SelectedValue = System.DateTime.Now.Year.ToString();

            //carregar lista de matriculas e selecionar primeiro registro
            matricula_id_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
            matricula_id.SelectedIndex = 0;
            matricula_id_SelectedIndexChanged(new object(), new Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs(matricula_id.Text, string.Empty, matricula_id.SelectedValue, string.Empty));


        }
    }
    protected void matricula_id_ItemsRequested(object o, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
    {
        matricula_id.DataSourceID = ods_Matricula.ID;
        matricula_id.DataBind();
    }
    protected void ods_Matricula_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        e.InputParameters["ALUNO_ID"] = aluno_id.Text;
        e.InputParameters["TODAS"] = true;
    }
    protected void bolsa_id_ItemsRequested(object o, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
    {
        bolsa_id.DataSourceID = ods_Bolsa.ID;
        bolsa_id.DataBind();
    }
    protected void pagamento_tipo_id_ItemsRequested(object o, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
    {
        pagamento_tipo_id.DataSourceID = ods_Pagamentotipo.ID;
        pagamento_tipo_id.DataBind();
    }
    protected void pag_anoreferencia_ItemsRequested(object o, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
    {
        pag_anoreferencia.DataSourceID = ods_AnoPagamento.ID;
        pag_anoreferencia.DataBind();
    }

    protected void imgbConfirmarDadosCad_Click(object sender, ImageClickEventArgs e)
    {
        
        //realizar multiplos pagamentos
        if (matricula_id.SelectedValue == "-1")
        {
            new BD_Pagamento()._inserir_Pagamento_Matriculas(aluno_id.Text,
                                                                bolsa_id.SelectedValue,
                                                                pag_valorpago.Text,
                                                                tur_valorreferencia.Text,
                                                                pag_multa.Text,
                                                                pag_juros.Text,
                                                                pag_desconto.Text,
                                                                pag_dtpagamento.SelectedDate.ToString(),
                                                                pag_anoreferencia.SelectedValue,
                                                                pag_mesreferencia.SelectedValue,
                                                                pag_observacao.Text,

                                                                forma_pagamento_id.SelectedValue,
                                                                pdt_parcela.Text,
                                                                pdt_datapamento.SelectedDate.ToString(),
                                                                pdt_bandeira.Text,
                                                                pdt_numerocheque.Text);
        }
        else
        {

            new NG_Pagamento()._inserir_Pagamento(  null,
                                                    matricula_id.SelectedValue,
                                                    hid_turma_id.Value,
                                                    bolsa_id.SelectedValue,
                                                    pag_valorpago.Text,
                                                    tur_valorreferencia.Text,
                                                    pag_multa.Text,
                                                    pag_juros.Text,
                                                    pag_desconto.Text,
                                                    pag_dtpagamento.SelectedDate.ToString(),
                                                    pag_anoreferencia.SelectedValue,
                                                    pag_mesreferencia.SelectedValue,
                                                    "0",
                                                    pagamento_tipo_id.SelectedValue,
                                                    null,
                                                    null,
                                                    pag_observacao.Text,
                                                    
                                                    null,
                                                    forma_pagamento_id.SelectedValue,
                                                    pdt_parcela.Text,
                                                    pdt_datapamento.SelectedDate.ToString(),
                                                    pdt_bandeira.Text,
                                                    pdt_numerocheque.Text);
        }

        //Após pagamento  .:. marcar pagamento efetuado .:. habilita botao de impressao de recibo
        
        /*
        pag_valorpago.ReadOnly = true;
        pag_dtpagamento.ReadOnly = true;
        pag_mesreferencia.Enabled = false;
        pag_anoreferencia.Enabled = false;
        bolsa_id.Enabled = false;
        pag_desconto.ReadOnly = true;
        pag_juros.ReadOnly = true;
        pag_multa.ReadOnly = true;
        pagamento_tipo_id.Enabled = false;
        */

        lbl_pag_mensalidadeAberto.Text = "Paga";
        lbl_pag_mensalidadeAberto.ForeColor = System.Drawing.Color.Red;
        pnlPagamentoDetalhe.Enabled = false;

        imgbImprimirRec.Visible = true;
        imgbConfirmarDadosCad.Visible = !imgbImprimirRec.Visible;

                                               
    }

    protected void matricula_id_SelectedIndexChanged(object o, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
    {
        if (!string.IsNullOrEmpty(matricula_id.SelectedValue))
        {            
            //calcular valor de todas as matriculas
            if (matricula_id.SelectedValue == "-1")
            {
                ES_Matricula mat = new BD_Matricula()._obter_Todas_Matriculas_by_Alunoid(aluno_id.Text);
                //sal_descricao.Text = mat.SAL_DESCRICAO;
                //turno_descricao.Text = mat.TURNO;
                tur_valorreferencia.Text = ((!string.IsNullOrEmpty(mat.MAT_VRMENSALIDADE)) ? mat.MAT_VRMENSALIDADE : mat.TUR_VALORREFERENCIA).Replace(".", "").Replace(".", "");
                mod_descricao.Text = mat.MOD_DESCRICAO;
                //preencher valor pago sugerido .:. foco no campo de mes_ref .:. preencher data pagamento sugerida .:. carrega tipo pgto sugerido
                pag_dtpagamento.SelectedDate = System.DateTime.Now;
                pag_valorpago.Text = ((!string.IsNullOrEmpty(mat.MAT_VRMENSALIDADEDESC)) ? mat.MAT_VRMENSALIDADEDESC : mat.TUR_VALORREFERENCIA).Replace(".","").Replace(",",".");
                pag_mesreferencia.Focus();
                pagamento_tipo_id_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
                pagamento_tipo_id.SelectedValue = "1"; //Mensalidade normal.
                
                //campo DESCONTO será resultante do valorReferencia - valorPago
                pag_desconto.Text = (Convert.ToDouble(tur_valorreferencia.Text.Replace(".", ",")) - Convert.ToDouble(pag_valorpago.Text.Replace(".", ","))).ToString().Replace(",", ".");
            }
            else
            {
                ES_Matricula mat = new BD_Matricula()._obter_Matricula_by_id(matricula_id.SelectedValue);
                sal_descricao.Text = mat.SAL_DESCRICAO;
                turno_descricao.Text = mat.TURNO;
                tur_valorreferencia.Text = ((!string.IsNullOrEmpty(mat.MAT_VRMENSALIDADE)) ? mat.MAT_VRMENSALIDADE : mat.TUR_VALORREFERENCIA).Replace(",", ".");
                mod_descricao.Text = mat.MOD_DESCRICAO;
                //preencher valor pago sugerido .:. foco no campo de mes/ref .:. preencher data pagamento sugerida .:. carrega tipo pgto sugerido
                pag_dtpagamento.SelectedDate = System.DateTime.Now;
                pag_valorpago.Text = tur_valorreferencia.Text;
                pag_mesreferencia.Focus();
                pagamento_tipo_id_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
                pagamento_tipo_id.SelectedValue = "1"; //Mensalidade normal.
                //carregar desconto associado a matricula
                if (!string.IsNullOrEmpty(mat.BOLSA_ID))
                {
                    bolsa_id_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
                    bolsa_id.SelectedValue = mat.BOLSA_ID;
                    bolsa_id_SelectedIndexChanged(new object(), new Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs(bolsa_id.Text, string.Empty, mat.BOLSA_ID, string.Empty));
                }
                else
                {
                    bolsa_id.SelectedIndex = -1;
                    lbl_bol_descontoIrmas.Visible = false;
                    ckb_bol_descontoIrmas.Visible = false;
                }                
            }

            //verificar se já foi relalizado pagamento
            validaPagamentoEmAberto(pag_mesreferencia.SelectedValue, pag_anoreferencia.SelectedValue);

            //carregar informações sobre responsáveis/parentesco
            ES_ResponsavelBolsa bolsaIrmaos = new BD_Responsavel()._validar_Pessoa_Parentesco_Aluno(string.Empty, aluno_id.Text);
            if (bolsaIrmaos.BOLSARESP)
            {
                /*================================================================================
                 * caso haja relação de parentesco carregar desconto irmãs(aõs) que será  calculado para um das irmãs, cuja mensalidade seja de menor valor
                 * só será indicado Bolsa Irmãs quando não houver bolsa aplicada .:. caso contrário indicar via checkBox
                ================================================================================*/
                if (string.IsNullOrEmpty(bolsa_id.SelectedValue))
                {
                    bolsa_id_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
                    bolsa_id.SelectedValue = "2";
                    bolsa_id.Enabled = false;
                    //neste caso nao se faz necessário informar qua são irmãs(ãos)
                    lbl_bol_descontoIrmas.Visible = false;
                    ckb_bol_descontoIrmas.Visible = false;
                }
                else
                {
                    lbl_bol_descontoIrmas.Visible = true;
                    ckb_bol_descontoIrmas.Visible = true;
                }
                pag_desconto.Text = ((string.IsNullOrEmpty(pag_desconto.Text)? 0 : Convert.ToDouble(pag_desconto.Text)) + Convert.ToDouble(bolsaIrmaos.BOLSA_DESCONTO)).ToString().Replace(",", ".");
                pag_valorpago.Text = (Convert.ToDouble(tur_valorreferencia.Text) - (string.IsNullOrEmpty(pag_desconto.Text) ? 0 : Convert.ToDouble(pag_desconto.Text))).ToString().Replace(",", ".");
            }
        }
    }
    protected void ods_Bolsa_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        
    }
    protected void pag_mesreferencia_SelectedIndexChanged(object o, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
    {
        if (!string.IsNullOrEmpty(pag_mesreferencia.SelectedValue) && !string.IsNullOrEmpty(pag_anoreferencia.SelectedValue))
            validaPagamentoEmAberto(pag_mesreferencia.SelectedValue, pag_anoreferencia.SelectedValue); 

    }
    protected void pag_anoreferencia_SelectedIndexChanged(object o, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
    {
        if (!string.IsNullOrEmpty(pag_mesreferencia.SelectedValue) && !string.IsNullOrEmpty(pag_anoreferencia.SelectedValue))
            validaPagamentoEmAberto(pag_mesreferencia.SelectedValue, pag_anoreferencia.SelectedValue); 
    }

    protected void validaPagamentoEmAberto(string mesRef, string anoRef)
    {
        if (!string.IsNullOrEmpty(mesRef) && !string.IsNullOrEmpty(anoRef))
        {
            pnlPagamentoDetalhe.Enabled = true;
            ES_Pagamento pgto = new BD_Pagamento()._obter_Pagamento_by_id(string.Empty, matricula_id.SelectedValue, aluno_id.Text, anoRef, mesRef);
            if (!string.IsNullOrEmpty(pgto.PAGAMENTO_ID))
            {
                lbl_pag_mensalidadeAberto.Text = "Paga";
                lbl_pag_mensalidadeAberto.ForeColor = System.Drawing.Color.Red;
                ckb_pagamentos_aberto.Checked = true;
                imgbConfirmarDadosCad.Visible = false;
                imgbImprimirRec.Visible = (!imgbConfirmarDadosCad.Visible);

                /*============================================================
                 * trazer detalhes do pagamento
                ==============================================================*/
                ES_Pagamento_detalhe pagDet = new BD_Pagamento_detalhe()._obter_Pagamento_detalhe_by_id(string.Empty, pgto.PAGAMENTO_ID);
                if (!string.IsNullOrEmpty(pagDet.PAGAMENTO_DETALHE_ID))
                {
                    pnlPagamentoDetalhe.Enabled = false;

                    forma_pagamento_id_ItemsRequested(new object(), new Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs());
                    forma_pagamento_id.SelectedValue = pagDet.FORMA_PAGAMENTO_ID;
                    forma_pagamento_id_SelectedIndexChanged(new object(), new Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs("","","",""));

                    pdt_parcela.Text = pagDet.PDT_PARCELA;
                    if (!string.IsNullOrEmpty(pagDet.PDT_DATAPAMENTO))
                        pdt_datapamento.SelectedDate = Convert.ToDateTime(pagDet.PDT_DATAPAMENTO);
                    if (!string.IsNullOrEmpty(pagDet.PDT_BANDEIRA))
                        pdt_bandeira.SelectedValue = pagDet.PDT_BANDEIRA;
                    if (!string.IsNullOrEmpty(pagDet.PDT_NUMEROCHEQUE))
                        pdt_numerocheque.Text = pagDet.PDT_NUMEROCHEQUE;
                }
            }
            else
            {
                lbl_pag_mensalidadeAberto.Text = "Em aberto";
                lbl_pag_mensalidadeAberto.ForeColor = System.Drawing.Color.Black;
                ckb_pagamentos_aberto.Checked = true;
                imgbConfirmarDadosCad.Visible = true;
                imgbImprimirRec.Visible = (!imgbConfirmarDadosCad.Visible);
            }

        }
    }
    protected void imgbImprimirRec_Click(object sender, ImageClickEventArgs e)
    {
        if (matricula_id.SelectedValue != "-1")
        {
                string strSQL = "SELECT ALUNO_ID, PAGAMENTO_ID, MATRICULA_ID, PES_NOME, MOD_DESCRICAO, PAG_ANOREFERENCIA, " +
                                "       CASE PAG_MESREFERENCIA  " +
                                "               WHEN 1 THEN 'JANEIRO'  " +
                                "               WHEN 2 THEN 'FEVEREIRO' " +
                                "               WHEN 3 THEN 'MARÇO'     " +
                                "               WHEN 4 THEN 'ABRIL'     " +
                                "               WHEN 5 THEN 'MAIO'      " +
                                "               WHEN 6 THEN 'JUNHO'     " +
                                "               WHEN 7 THEN 'JULHO'     " +
                                "               WHEN 8 THEN 'AGOSTO'    " +
                                "               WHEN 9 THEN 'SETEMBRO'  " +
                                "               WHEN 10 THEN 'OUTUBRO'  " +
                                "               WHEN 11 THEN 'NOVEMBRO' " +
                                "               ELSE 'DEZEMBRO' END AS PAG_MESREFERENCIA, " +
                                "       NIV_DESCRICAO, PAG_DTPAMENTO, TUR_DESCRICAO, PAG_VALORPAGO, PAGAMENTO_TIPO_ID, PTO_DESCRICAO, FORMA_PAGAMENTO_ID, DIA_IMPRES, MES_IMPRES, ANO_IMPRES, " +
                                "       'Belo Horizonte, '+CAST(DIA_IMPRES AS VARCHAR(2))+' de '+MES_IMPRESEXTENSO+' de '+CAST(ANO_IMPRES AS VARCHAR(4))  AS DTA_IMPRES " +
                                "FROM VW_RPTPAGAMENTO_RECIBO " +
                                "WHERE PAGAMENTO_TIPO_ID = 1 " +//mensalidade normal
                                "AND MATRICULA_ID = " + matricula_id.SelectedValue + " AND PAG_ANOREFERENCIA = " + pag_anoreferencia.SelectedValue + " AND PAG_MESREFERENCIA = " + pag_mesreferencia.SelectedValue;

                string errorReport = new Frame.GerarPDF()._exportarReportViewerPDF(strSQL,
                                                                                Server.MapPath("~/Relatorios/"),
                                                                                "ReciboPagamento",
                                                                                string.Empty,
                                                                                "_" + Session.SessionID,
                                                                                "DataSet1");
            
        }
        else
        {
                string strSQL = "SELECT ALUNO_ID, PAGAMENTO_ID, MATRICULA_ID, PES_NOME, MOD_DESCRICAO, PAG_ANOREFERENCIA, " +
                                "       CASE PAG_MESREFERENCIA  " +
                                "               WHEN 1 THEN 'JANEIRO'  " +
                                "               WHEN 2 THEN 'FEVEREIRO' " +
                                "               WHEN 3 THEN 'MARÇO'     " +
                                "               WHEN 4 THEN 'ABRIL'     " +
                                "               WHEN 5 THEN 'MAIO'      " +
                                "               WHEN 6 THEN 'JUNHO'     " +
                                "               WHEN 7 THEN 'JULHO'     " +
                                "               WHEN 8 THEN 'AGOSTO'    " +
                                "               WHEN 9 THEN 'SETEMBRO'  " +
                                "               WHEN 10 THEN 'OUTUBRO'  " +
                                "               WHEN 11 THEN 'NOVEMBRO' " +
                                "               ELSE 'DEZEMBRO' END AS PAG_MESREFERENCIA, " +
                                "       NIV_DESCRICAO, PAG_DTPAMENTO, TUR_DESCRICAO, PAG_VALORPAGO, PAGAMENTO_TIPO_ID, PTO_DESCRICAO, FORMA_PAGAMENTO_ID, DIA_IMPRES, MES_IMPRES, ANO_IMPRES, " +
                                "       'Belo Horizonte, '+CAST(DIA_IMPRES AS VARCHAR(2))+' de '+MES_IMPRESEXTENSO+' de '+CAST(ANO_IMPRES AS VARCHAR(4))  AS DTA_IMPRES " +
                                "FROM VW_RPTPAGAMENTO_RECIBO " +
                                "WHERE PAGAMENTO_TIPO_ID = 1 " +//mensalidade normal
                                "AND ALUNO_ID = " + aluno_id.Text + " AND PAG_ANOREFERENCIA = " + pag_anoreferencia.SelectedValue + " AND PAG_MESREFERENCIA = " + pag_mesreferencia.SelectedValue;

                string errorReport = new Frame.GerarPDF()._exportarReportViewerPDF(strSQL,
                                                                                Server.MapPath("~/Relatorios/"),
                                                                                "ReciboPagamentoGeral",
                                                                                string.Empty,
                                                                                "_" + Session.SessionID,
                                                                                "DataSet1");            
        }
    }
    protected void bolsa_id_SelectedIndexChanged(object o, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
    {
        if (!string.IsNullOrEmpty(bolsa_id.SelectedValue))
        {
            ES_bolsa bolsa = new BD_bolsa()._obter_bolsa_by_id(bolsa_id.SelectedValue);
            if (!string.IsNullOrEmpty(bolsa.BOL_DESCONTOVALOR))
            {
                pag_desconto.Text = bolsa.BOL_DESCONTOVALOR;
            }
            else if (!string.IsNullOrEmpty(bolsa.BOL_DESCONTOPERC) && !string.IsNullOrEmpty(tur_valorreferencia.Text))
            {
                pag_desconto.Text = Util.formataReal2Casas((Convert.ToDouble(tur_valorreferencia.Text.Replace(".", ",")) * (Convert.ToDouble(bolsa.BOL_DESCONTOPERC.Replace(".", ",")) / 100)).ToString()).Replace(",", ".");
            }

            if (!string.IsNullOrEmpty(pag_desconto.Text))
            {
                double valorPago = Convert.ToDouble(tur_valorreferencia.Text.Replace(".", ",")) - Convert.ToDouble(pag_desconto.Text.Replace(".", ","));
                pag_valorpago.Text = valorPago.ToString().Replace(",", ".");
            }
        }
    }
    protected void forma_pagamento_id_ItemsRequested(object o, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
    {
        forma_pagamento_id.DataSourceID = ods_FormaPagamento.ID;
        forma_pagamento_id.DataBind();
    }
    protected void forma_pagamento_id_SelectedIndexChanged(object o, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
    {        
        //sugerir data corrente, quando mensalidade não paga
        if (!ckb_pagamentos_aberto.Checked)
            pdt_datapamento.SelectedDate = System.DateTime.Now;

        //dados do cheque
        lbl_pdt_numerocheque.Visible = (forma_pagamento_id.SelectedValue == "2");
        pdt_numerocheque.Visible = (forma_pagamento_id.SelectedValue == "2");
        //dados do cartão de crédito
        lbl_pdt_bandeira.Visible = (forma_pagamento_id.SelectedValue == "3");
        pdt_bandeira.Visible = (forma_pagamento_id.SelectedValue == "3");
        
        //limpar campos
        pdt_bandeira.SelectedValue = string.Empty;
        pdt_numerocheque.Text = string.Empty;
    }
    protected void mensalidadeEmAbero_ItemsRequested(object o, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
    {
        mensalidadeEmAbero.DataSourceID = ods_Pagamentos.ID;
        mensalidadeEmAbero.DataBind();
    }
    protected void ods_Pagamentos_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        e.InputParameters["MATRICULA_ID"] = matricula_id.SelectedValue;        
        e.InputParameters["SOMENTE_MENSALIDADES_EM_ABERTO"] = "S";
    }
    protected void imgbBuscaMultaParam_Click(object sender, ImageClickEventArgs e)
    {
        ES_Parametro parametro = new BD_Parametro()._obter_Parametro_by_id(null, "multa_atraso");
        if (!string.IsNullOrEmpty(parametro.PRM_VALOR))
            pag_multa.Text = parametro.PRM_VALOR;
        else                
            pag_multa.Text = (Convert.ToDouble(tur_valorreferencia.Text) * Convert.ToDouble(parametro.PRM_PERCENTUAL) / 100).ToString().Replace(",",".");        
    }
}